/***
 * @Description: 本文件是定义以太网协议的相关接口函数和数据结构的头文件
 * @Author: Liverpool
 * @Date: 2024-05-17 06:43:46
 * @LastEditTime: 2024-05-17 06:44:41
 * @LastEditors: Liverpool
 */
#ifndef ETHERNET_H
#define ETHERNET_H

#include "netComman.h"
#include "sys_plat.h"
#include "protocol.h"
#include "net_Interface.h"

// ethernet的宏定义区
#define ETHERNET_HW_SIZE 6   // 以太网的硬件地址(mac地址)
#define ETHERNET_MTU 1500    // 以太网的最大传输数据量
#define ETHERNET_DATA_MIN 46 // 以太网的最新数据帧是46字节

#pragma pack(1) // 设置字节对齐为1

// 以太网的数据帧头结构
typedef struct _ethernet_header
{
    uint8_t dest[ETHERNET_HW_SIZE]; // 目的地址
    uint8_t src[ETHERNET_HW_SIZE];  // 源地址
    uint16_t protocol;              // 协议类型
} D_Ethernet_Header;                // 以太网头文件

// ethernet的数据帧结构
typedef struct _ethernet_packet
{
    D_Ethernet_Header header;   // 包头
    uint8_t data[ETHERNET_MTU]; // 数据存储区
} D_Ethernet_Packet;

#pragma pack() // 恢复字节对齐

net_err_t ethernet_init(void);                                                                                // 以太网协议层初始化
const uint8_t *ethernet_broadcast_addr(void);                                                                 // 得到以太网的广播地址
net_err_t ethernet_raw_out(D_Net_Interface *netif, uint16_t protocol, const uint8_t *dest, D_Packet *packet); // 以太网发送原始数据帧
#endif                                                                                                        // !ETHERNET_H